package cn.wolfcode.luowowo.member.service;

import cn.wolfcode.luowowo.common.exception.LogicException;
import cn.wolfcode.luowowo.member.domain.UserInfo;

import java.util.List;

public interface IUserInfoService {

    /**
     *  按id查找用户
     * @param id
     * @return
     */
    UserInfo get(Long id);

    /**
     *  根据手机号码查询是否已注册
     * @param phone
     * @return
     */
    Boolean checkPhone(String phone);

    /**
     *  设置验证码
     * @param phone
     */
    void sendVerifyCode(String phone) throws LogicException;

    /**
     *  完成注册用户
     * @param phone
     * @param nickname
     * @param password
     * @param rpassword 确认密码也要检查是为了防止postman跳过前台直接访问
     * @param verifyCode
     * throws LogicException 在接口处声明自定义异常,否则dubbo会将其包装成运行时异常,即使后台显示的是自定义错误信息,前台依然显示运行时错误信息
     */
    void userRegist(String phone, String nickname, String password, String rpassword, String verifyCode) throws LogicException;

    /**
     *  用户登录
     * @param username
     * @param password
     * @return
     * throws LogicException 在接口处声明自定义异常,否则dubbo会将其包装成运行时异常,即使后台显示的是自定义错误信息,前台依然显示运行时错误信息
     */
    String userLogin(String username, String password) throws LogicException;

    /**
     *  查找所有用户
     * @return
     */
    List<UserInfo> list();

    /**
     * 修改用户信息
     * @param user
     */
    void renewUserInfo(UserInfo user);

    /**
     * 更新用户头像
     * @param filename 头像地址
     * @param userId 用户id
     */
    void renewHeadImg(String filename, Long userId);

    /**
     * 发送手机验证码
     * @param phone 手机号码
     */
    void send(String phone);

    /**
     * 电话验证验证码
     * @param verifyCode 验证码
     * @param phone 电话
     * @return
     */
    boolean VerifyCode(String verifyCode, String phone) throws LogicException;

    /**
     * 资料完善度
     * @param user
     * @return
     */
    double getSafetyIntegrity(UserInfo user);

    /**
     * 删除用户
     * @param id
     */
    void delete(Long id);

    List<UserInfo> getFollowers(Long id);
}
